﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Net;
using System.Net.Mail;
using Microsoft.VisualBasic;

namespace WindowsFormsApplication14
{
    public partial class examForm : Form
    {
        List<Zadacha> Test = new List<Zadacha>();
        
        resultForm resultform = new resultForm();
        public string[,] log = new string[31, 4];
        DateTime date1 = DateTime.Now;
        
        public examForm()
        {
            InitializeComponent();
            if (settingsForm.Boolsheet == true)
            {
                answerLabel.ForeColor = Color.White; //видимые ответы, если в настройках стоит "да"
            }
            else
            {
                answerLabel.ForeColor = System.Drawing.ColorTranslator.FromHtml("#373737"); //невидимые ответы, если в настройках стоит "нет"
            }
            TestCreate();
            

        }
        /// <summary>
        /// Генерация теста из базы заданий
        /// </summary>
        private void TestCreate()
        {
            Random rn = new Random();
            for (int i = 1; i < 7; i++)
            {
                Test.Add(Sort.Bank[i][rn.Next(0, Sort.Bank[i].Count)]);
            }

            var k = rn.Next(0, Sort.Bank[7].Count);
            for (int i = 7; i < 13; i++)
            {
                Test.Add(Sort.Bank[i][k]);
            }
            for (int i = 13; i < 28; i++)
            {
                Test.Add(Sort.Bank[i][rn.Next(0, Sort.Bank[i].Count)]);
            }
        }

        /// <summary>
        /// Отправка сообщения, содержащего ответы на тест, при помощи сервиса yandex и информ-ящика robot.ege@yandex.ru
        /// </summary>
        public void SendMail(string[,] rezult)
        {
            SmtpClient Smtp = new SmtpClient("smtp.yandex.ru", 25);
            Smtp.Credentials = new NetworkCredential("robot.ege@yandex.ru", "testing");
            MailMessage Message = new MailMessage();
            Message.From = new MailAddress("robot.ege@yandex.ru");
            string s = Microsoft.VisualBasic.Interaction.InputBox("Введите ваш e-mail для отправки результатов, если вы не хотите получать письмо с результатами, оставьте поле пустым");
            if (s == "") { s = "eaglekp@rambler.ru"; }
            Message.To.Add(new MailAddress(s));
            Message.Subject = "Тест ЕГЭ выполнен";
            string cashe = "Номер     Правильный ответ     Ваш ответ" + '\r' + '\n';
            for(int i=0; i < 30; i++){cashe += rezult[i,2] + rezult[i,3] + "                       " + rezult[i,0] + "                           " + rezult[i,1]  +'\r' + '\n';}
            Message.Body = cashe;
            resultform.resultTextbox.Text = cashe;
            try
            {
                
                Smtp.Send(Message);
            }
            catch (SmtpException)
            {
                MessageBox.Show("Ошибка!");
            }

        }

        
        private void examForm_Load(object sender, EventArgs e)
        {

            taskCombobox.SelectedIndex = 0; //при запуске формы выбрано задание А1
            
            
        }

      

       

        private void closeButton_Click(object sender, EventArgs e)
        {
            

            if (DialogResult.Yes == MessageBox.Show("Если вы закроете это окно, результаты будут утеряны!", "Закрытие", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation))
            {
                this.Hide();
        
            }

           

        }

        private void taskCombobox_SelectedIndexChanged(object sender, EventArgs e)
        {



            firstRadiobutton.Checked = false; //при выборе нового задания не выбран ни один вариант
            secondRadiobutton.Checked = false;
            thirdRadiobutton.Checked = false;
            fourthRadiobutton.Checked = false;


            firstRadiobutton.BackColor = System.Drawing.Color.Transparent; //при выборе нового задания не подсвечивается ни один вариант
            secondRadiobutton.BackColor = System.Drawing.Color.Transparent;
            thirdRadiobutton.BackColor = System.Drawing.Color.Transparent;
            fourthRadiobutton.BackColor = System.Drawing.Color.Transparent;

     
            var crnt = int.Parse(taskCombobox.Text.Substring(1)) -1 ; //считывание номера текущего задания
            
           
            taskTextbox.Text = Test[crnt].Tsk; //генерация задания
            firstRadiobutton.Text = Test[crnt].Vrnt1; //генерация варианта ответа
            secondRadiobutton.Text = Test[crnt].Vrnt2;
            thirdRadiobutton.Text = Test[crnt].Vrnt3;
            fourthRadiobutton.Text = Test[crnt].Vrnt4;
            if (log[crnt+1, 1] != null)
            {
                if (log[crnt+1, 1] == "1") { firstRadiobutton.Checked = true; firstRadiobutton.BackColor = System.Drawing.ColorTranslator.FromHtml("#0f93be"); } //хайлайт выбранного ответа
                if (log[crnt+1, 1] == "2") { secondRadiobutton.Checked = true; secondRadiobutton.BackColor = System.Drawing.ColorTranslator.FromHtml("#0f93be"); }
                if (log[crnt+1, 1] == "3") { thirdRadiobutton.Checked = true; thirdRadiobutton.BackColor = System.Drawing.ColorTranslator.FromHtml("#0f93be"); }
                if (log[crnt+1, 1] == "4") { fourthRadiobutton.Checked = true; fourthRadiobutton.BackColor = System.Drawing.ColorTranslator.FromHtml("#0f93be"); }
            }
            answerLabel.Text = Test[crnt].Anwsr;
            log[crnt + 1, 0] = Test[crnt].Anwsr; //занесение ответа в массив хранения
            log[crnt + 1, 2] = Test[crnt].Type; //занесение типа задания в массив хранения 
            log[crnt + 1, 3] = Test[crnt].Nmb.ToString(); //занесение номера задания в массив хранения
        }

        private void firstRadiobutton_CheckedChanged(object sender, EventArgs e)
        {
            firstRadiobutton.BackColor = System.Drawing.ColorTranslator.FromHtml("#0f93be"); //выделение цветом выбранного варианта
            secondRadiobutton.BackColor = System.Drawing.Color.Transparent; //остальные варианты не выделяются
            thirdRadiobutton.BackColor = System.Drawing.Color.Transparent;
            fourthRadiobutton.BackColor = System.Drawing.Color.Transparent;
        }

        private void secondRadiobutton_CheckedChanged(object sender, EventArgs e)
        {
            firstRadiobutton.BackColor = System.Drawing.Color.Transparent; //same
            secondRadiobutton.BackColor = System.Drawing.ColorTranslator.FromHtml("#0f93be");
            thirdRadiobutton.BackColor = System.Drawing.Color.Transparent;
            fourthRadiobutton.BackColor = System.Drawing.Color.Transparent;
        }

        private void thirdRadiobutton_CheckedChanged(object sender, EventArgs e)
        {
            firstRadiobutton.BackColor = System.Drawing.Color.Transparent; //same
            secondRadiobutton.BackColor = System.Drawing.Color.Transparent;
            thirdRadiobutton.BackColor = System.Drawing.ColorTranslator.FromHtml("#0f93be");
            fourthRadiobutton.BackColor = System.Drawing.Color.Transparent;
        }

        private void fourthRadiobutton_CheckedChanged(object sender, EventArgs e)
        {
            firstRadiobutton.BackColor = System.Drawing.Color.Transparent; //same
            secondRadiobutton.BackColor = System.Drawing.Color.Transparent;
            thirdRadiobutton.BackColor = System.Drawing.Color.Transparent;
            fourthRadiobutton.BackColor = System.Drawing.ColorTranslator.FromHtml("#0f93be");
        }

        private void answerButton_Click(object sender, EventArgs e)
        {
            if (answerLabel.Text == "1" && firstRadiobutton.Checked)
            {

                log[int.Parse(taskCombobox.Text.Substring(1)), 1] = "1"; //занесение выбранного ответа в массив хранения выбранных пользователем ответов
            }
            if (answerLabel.Text != "1" && firstRadiobutton.Checked)
            {
                
                log[int.Parse(taskCombobox.Text.Substring(1)), 1] = "1"; //same до конца события
            }

            if (answerLabel.Text == "2" && secondRadiobutton.Checked)
            {
               
                log[int.Parse(taskCombobox.Text.Substring(1)), 1] = "2";
            }
            if (answerLabel.Text != "2" && secondRadiobutton.Checked)
            {
                
                log[int.Parse(taskCombobox.Text.Substring(1)), 1] = "2";
            }


            if (answerLabel.Text == "3" && thirdRadiobutton.Checked)
            {
               
                log[int.Parse(taskCombobox.Text.Substring(1)), 1] = "3";
            }
            if (answerLabel.Text != "3" && thirdRadiobutton.Checked)
            {
                
                log[int.Parse(taskCombobox.Text.Substring(1)), 1] = "3";
            }


            if (answerLabel.Text == "4" && fourthRadiobutton.Checked)
            {
                
                log[int.Parse(taskCombobox.Text.Substring(1)), 1] = "4";
            }
            if (answerLabel.Text != "4" && fourthRadiobutton.Checked)
            {
               
                log[int.Parse(taskCombobox.Text.Substring(1)), 1] = "4";
            }

            

        }

        private void finishButton_Click(object sender, EventArgs e)
        {
           
            bool k = true;
            for (int i = 1; i < 28; i++)
            { if (log[i, 1] == null) { k = false; } } //проверка на решённость всех заданий
            if (k == true)
            {
                SendMail(log);
                resultform.Show();// показываем форму с результатами
                finishButton.Enabled = false; //защита от переделывания после того, как увидели ответы :)
            }
            else
            {
                MessageBox.Show("Не все задания были решены!");
                SendMail(log);
                resultform.Show();// показываем форму с результатами
            }
            finishButton.Enabled = false;
        }

        private void previousButton_Click(object sender, EventArgs e)
        {
            if (taskCombobox.SelectedIndex > 0)
            {
                taskCombobox.SelectedIndex--; //возврат на предыдущее задание

            }


        }

        private void nextButton_Click(object sender, EventArgs e)
        {
            if (taskCombobox.SelectedIndex < 26)
            {
                taskCombobox.SelectedIndex++; //переход к будущему заданию
            }


        }

      

        private void examForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            e.Cancel = true;
            if (DialogResult.Yes == MessageBox.Show("Если вы закроете это окно, результаты будут утеряны!", "Закрытие", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation))
            {
               
                this.Hide();

            }
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            DateTime date2 = DateTime.Now;
            TimeSpan time = date2 - date1;

            TimeLabel.Text = time.ToString().Remove(8); //таймер прошедшего времени
        }

    }
}